using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using FernUniHagen.CompilerExtension.DataStructures;
using Roslyn.Compilers.Common;
using Roslyn.Compilers.CSharp;

namespace FernUniHagen.CompilerExtension.Interfaces
{
    public interface IDeclaration<T> : IAttributable, ITypeable, IMultiplicityConvertible<T> where T : CommonSyntaxNode
    {
        ISemanticModel SemanticModel { get;set; }
        AttributeType MultiplicityType { get; }
        GenericNameSyntax GenericName { get; }
        // AttributeType GetMultiplicityAttribute();
        //  List<string> GetMultiplicityAttribute(out AttributeType multiplicityType, out GenericNameSyntax genericName);

        /// <summary>
        /// Returns the name of the variable e.g. string test => "test" would be returned
        /// </summary>
        /// <returns>the name of the variable</returns>
        string GetName();
    }
}
